#include <stdio.h>

//scanf & printf

int main()
{
	//printf

	//printf = print(打印) + format(格式)
	//printf 其实是将数据按照指定格式来打印，定制输出文本格式

	//%d 表示一个整数
	//%f 表示一个浮点数
	//%c 表示一个字符
	//%s 表示一个字符串
	//%lf 表示一个双精度浮点数
	//%e 表示一个科学计数法浮点数
	//%g 表示一个科学计数法浮点数
	//%x 表示一个十六进制数
	//%o 表示一个八进制数
	//%b 表示一个二进制数
	//%p 表示一个指针

	printf("100\n");//输出格式：字符串
	//printf是一个格式化输出函数，
	// 它会根据格式说明符（比如%d、%s等）来决定如何处理参数并输出。
	// 如果用户没有指定格式说明符，printf会直接输出参数本身的内容。
	// 这里的参数是"100\n"，这是一个字符串常量，
	// 所以printf会直接输出字符串。

	//printf函数的作用是将指定的内容格式化后输出到标准输出设备（通常是屏幕）。、
	// 当使用printf("100\n");时，双引号中的内容"100\n"是一个字符串常量，
	// printf会按照字符串的格式将其输出。

	printf("%d\n", 100);//输出格式：整数

	//----------------------------------------------------

	//占位符
	//printf( ) 可以在输出文本中指定占位符，
	//占位符用 % 表示，后面接一个格式说明符，
	//用来指定输出的格式和类型。
	//所谓“占位符”，就是这个位置可以用其他值代入
	printf("there are 3 kids\n");
	printf("there are %d kids\n", 3);
	printf("there are %d %s\n", 3, "kids");//输出文本可以有多个占位符，依次对应
	printf("there are %.2f kids\n", 2.5);
	printf("there %s %d kids\n", "are");//当缺少参数时，输出会出错，为随机值
	printf("6/4 = (%%f)%f\n", 6 / 4);// 6/4 为整数除法，结果为1，为整型，占位符却是%f，格式不匹配，输出出错
	// %% 输出一个%，相当于转义字符的用法

	int a = 15;
	printf("%d\n", a);
	printf("%x\n", a);

	//----------------------------------------------------

	// 宽度/位数
	//printf可以限定最小宽度，不是指定宽度
	printf("%5dxxx\n", 100);//输出格式：整数，宽度为5
	printf("%5dxxx\n", 10000);//输出格式：整数，宽度为5
	printf("%5dxxx\n", 1000000);//输出格式：整数，宽度为5
	//不够的补，多出的不删，限定的是最少宽度

	//默认右对齐，用空格补充
    printf("%-5dxxx\n", 100);//加负号，左对齐
    printf("%05dxxx\n", 123);//右对齐可以指定用0补充(不可以用其他数填充)
	printf("%-05dxxx\n", 123);//左对齐不可以用0补充

	printf("%f\n", 3.1415);
    printf("%12f\n", 3.1415);//12位包括小数点前面的数、小数点后面的数、小数点(占一位)
	printf("%.5f\n", 3.1415);
	printf("%.2f\n", 3.1415);// .2f 表示小数点后面保留两位(四舍五入进位)
    printf("%.3f\n", 3.1415);
    printf("%6.2f\n", 3.1415);

	//最小宽度和小数位数这两个限定值可以用 * 代替，通过printf函数的参数传入
	printf("%*.*f\n", 8, 3, 3.1415);//也可以用变量传入代替常数

	//----------------------------------------------------

	//符号
	//正数输出默认没有符号位，负数默认有符号位，若想都显示正负号，则用%+d
    printf("%d\n", 100);
    printf("%d\n", -100);
	printf("%+d\n", 100);
    printf("%+d\n", -100);

	//----------------------------------------------------

	//输出字符串
	printf("%s\n", "hello world");
	printf("%.5s\n", "hello world");//输出前5个字符，若不够5个，则输出全部字符
	printf("%.5s\n", "he");
	//注意是 .5s 不是 5s 
	//5s是最小宽度(同%5d), .5s 是最大宽度(位数)
    printf("%5s\n", "hello world");
	

	return 0;
}